package com.example.producerandconsumer.waitnotify;

import java.util.Queue;
import java.util.Random;

public class Consumer implements Runnable {
    private final Queue<Data> queue;
    private final int num;

    public Consumer(Queue<Data> queue, int num) {
        this.queue = queue;
        this.num = num;
    }

    @Override
    public void run() {
        System.out.println("消费者" + num + "开始消费！！！！！！！！！！");
        Data data = null;
        Random random = new Random();
        try {
            while (true) {
                synchronized (queue) {
                    while (queue.size() == 0) {
                        System.out.println("消费者" + num + "消费失败，当前队列为空啦~");
                        queue.wait();
                    }
                    // 终于可以消费了
                    data = queue.poll();
                    System.out.println("消费者" + num + "消费了" + data.data);
                    queue.notifyAll();
                }
                // 模拟消费者消费耗时，即当前生产者生产完成，把锁释放后，先睡一会儿，让其他生产者生产
                Thread.sleep(random.nextInt(1000));
            }
        } catch (
                InterruptedException e) {
            e.printStackTrace();
        }
    }

//    @Override
//    public void run() {
//        System.out.println("消费者" + num + "开始消费！！！！！！！！！！");
//        Data data = null;
//        Random random = new Random();
//        try {
//            synchronized (queue) {
//                while (true) {
//                    if (queue.size() == 0) {
//                        System.out.println("消费者" + num + "消费失败，当前队列为空啦~");
//                        queue.wait();
//                    } else {
//                        // 终于可以消费了
//                        data = queue.poll();
//                        System.out.println("消费者" + num + "消费了" + data.data);
//                        queue.notifyAll();
//                    }
//                }
//            }
//        } catch (
//                InterruptedException e) {
//            e.printStackTrace();
//        }
//    }
}

